package com.remainder.sdk.export.service;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

import com.remainder.sdk.export.config.ExportLogConfig;

/**
 * 批量导出接口
 *
 * @author qiaomignzhi
 * @date 2023-06-13
 */
public interface BatchExport<T> {

    /**
     * 开启批次导出
     *
     * @param config
     *            配置
     * @param cursorSupplier
     *            数据源
     */
    void startExport(ExportLogConfig config, Supplier<List<T>> cursorSupplier);

    /**
     * 加载数据 处理数据
     *
     * @param cursorSupplier
     *            数据源
     * @param config
     *            导出配置
     * @return 结果
     * @throws Exception
     *             异常
     */
    File dealWithData(Supplier<List<T>> cursorSupplier, ExportLogConfig config, String batchNumber) throws Exception;

    /**
     * 文件上传
     *
     * @param zipFile
     *            压缩文件
     * @param exportLogConfig
     *            导出配置
     * @param batchNumber
     *            批次数量
     * @return 结果
     * @throws IOException
     *             异常
     */
    Map<String, String> uploadData(File zipFile, ExportLogConfig exportLogConfig, String batchNumber)
        throws IOException;

    /**
     * 导出任务完结
     *
     * @param uploadResult
     *            {@link com.remainder.sdk.export.service.impl.BatchExportImpl#uploadData(File, ExportLogConfig, String)}处理结果
     */
    void executorFinally(Map<String, String> uploadResult);
}
